
package com.mc.read.common.util;


import com.mc.read.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;

import java.util.Map;

/**
 * 校验参数工具类
 *
 */
@Slf4j
public class ValidParamUtils {



    /**
     * 校验业务字段的非空和长度
     *
     * @param object    具体的请求业务对象
     */
    public static void validBusinessParam(Object object, String nullString,String lengthString) throws ServiceException {
       Map map= BeanMapUtils.transBean2Map(object);
        /**
         * 非空校验
         * 1、根据配置获取需要校验的字段
         * 配置的字段如：noNullValid_addContacts=passengerName,passportseNo,passportTypeId
         * 2、匹配每一个需要校验的参数
         */
        if (nullString != null) {
            String[] arrayStr = nullString.split(",");
            for (int j = 0; j < arrayStr.length; j++) {
                String[] arrayStr1 = arrayStr[j].split(":");
                if(ObjectUtils.isEmpty(map.get(arrayStr1[0]))){
                    throw new ServiceException(205050,
                            arrayStr1[1] + "不能为空");
                }

            }
        }
        /**
         * 长度校验
         * 1、根据配置获取需要校验的字段
         * 配置的字段如：lenghtValid_addContacts=passengerName:[50,50];passportseNo:[11,15]
         */
        if (lengthString != null) {
            /***得到类型这样的数组
             * 如：arrLenghtPar[0]=passengerName:[50,50]
             * arrLenghtPar[1]=passportseNo:[10,20]
             */
            String[] arrLenghtPar = lengthString.split(",");
            // 2、校验每一个值
            // 解析属性名称和参数
            for (int j = 0; j < arrLenghtPar.length; j++) {
                String[] lengthArray=arrLenghtPar[j].split(":");
                String value = (String) map.get(lengthArray[0]);
                int min=Integer.parseInt(lengthArray[2]);
                int max=Integer.parseInt(lengthArray[3]);
                // 校验长度
                if (value.length() < min || value.length() > max) {
                    throw new ServiceException(205050, lengthArray[1] + "的长度应该在" + min + "到" + max + "之间");
                }
            }
        }
    }




}
